시작하기 튜토리얼의 디자인을 다시 한 번 살펴보겠습니다. 아직 시작하기 튜토리얼의 디자인을 완성하지 않으셨다면, 뒤로 돌아가서 먼저 시작하기 튜토리얼을 완료하시기 바랍니다 (시작하기). 지금까지 우리가 수정한 부분은 매개변수 이름뿐이었습니다. 이제 다음 특성을 가진 카메라의 이미지를 처리하도록 애플릿을 수정해 보겠습니다.
- 이미지 측면 크기 512 x 512
- 12비트/픽셀 그레이스케일
- Camera Link 듀얼 탭 베이스 구성 모드의 인터페이스
본 설계에는 이미 CameraGrayAreaBase 연산자가 포함되어 있습니다. 이 연산자는 mE4VD4-CL 연산자 라이브러리에 속하며, mE4 Camera Link 프레임 그래버에서만 사용할 수 있습니다. 즉, mE4VD4-CL 라이브러리는 하드웨어 전용 연산자들이 포함된 라이브러리입니다. CameraGrayAreaBase 연산자는 기본 구성 모드에서 Camera Link 을 사용하는 그레이스케일 영역 스캔 카메라를 지원합니다. 설계에서 카메라 모듈을 더블 클릭하여 속성 창을 엽니다. 매개변수 중 하나는 “Format”입니다. 여기서 특정 Camera Link 형식을 선택할 수 있습니다. DualTap12Bit를 선택하고, 변경 사항을 적용한 후 창을 닫습니다. 이제 설계에서 12비트 카메라 이미지를 획득할 수 있게 되었습니다.
“Format” 매개변수는 동적이라는 점에 유의하십시오. 즉, 하드웨어에서 설계 합성을 완료한 후에도 이 값을 변경할 수 있어 여러 카메라 형식을 유연하게 사용할 수 있습니다. 그러나 카메라의 링크를 더블클릭해 보면, 링크의 비트 폭이 여전히 8비트/픽셀로 설정되어 있음을 알 수 있습니다. 게다가, 최대 이미지 크기도 충분히 크지 않습니다. 링크가 8비트밖에 되지 않는다면 왜 12비트 카메라를 사용할 수 있는지 의문이 들 수 있습니다. 그 이유는 카메라 이미지의 최상위 8비트만 전송되기 때문입니다. 즉, 사용 가능한 링크 비트만 사용됩니다. 오퍼레이터는 카메라 오퍼레이터의 설정에 따라 이미지에서 올바른 비트를 자동으로 선택합니다. 자세한 내용은 카메라 운영자 문서를 참조하십시오('CameraGrayAreaBase'). 카메라의 전체 비트 심도를 처리하기 위해 비트 폭을 12비트로 변경하겠습니다.
값을 변경한 후 ‘적용’을 클릭하세요. 보시다시피, 카메라, 버퍼 및 DMA 간의 링크 색상이 검은색에서 녹색으로 바뀌었습니다. 이는 변경 사항이 적용되고 유효한 것으로 확인되었음을 나타냅니다. 또한 링크 속성인 “비트 폭”이 이미지 버퍼를 통해 버퍼와 DMA 모듈 간의 링크로 전파되었습니다. 따라서 사용자는 모든 링크에서 비트 폭을 일일이 변경할 필요가 없습니다. 링크 속성은 모듈을 통해 전파되며, 해당 모듈에서 링크 비트 폭을 직접 변경하거나 사용자 입력이 필요한 경우에만 중단됩니다. 버퍼와 DMA 간의 링크 속성을 열어보면, 이곳에서는 비트 폭을 변경할 수 없다는 것을 알 수 있습니다.
이는 선행 연산자 ImageBuffer가 링크 비트 폭을 변경할 수 없기 때문입니다. 따라서, 연결된 연산자가 변경을 허용하는 경우, 즉 정의상 비트 폭에 영향을 미치는 연산인 경우에만 링크 속성을 변경할 수 있습니다.
카메라에 필요한 이미지 측면 크기는 512 x 512 픽셀입니다. 링크 속성에서 ‘Max. Img Width’ 및 ‘Max. Image Height’라는 속성을 확인할 수 있습니다. 이 속성들은 링크에 표시될 이미지의 최대 크기를 나타냅니다. 이는 최대 크기이며, 이보다 작은 크기는 모두 허용됩니다. 그러나 이 제한을 초과하는 이미지 크기는 VisualApplets 의 디자인 규칙을 위반하게 되며, 하드웨어에서 애플릿을 사용할 때 오류가 발생할 수 있습니다.
이미지 크기는 항상 필요한 최소값으로 설정해야 합니다. 이미지 크기를 작게 설정하면 FPGA 로직 및 메모리 리소스를 절약할 수 있기 때문입니다. 예제로 돌아가 보겠습니다. 카메라와 버퍼를 연결하는 링크의 속성을 열고, 최대 이미지 너비와 높이를 512 x 512로 선택합니다. 설정이 완료되면 ‘적용’을 클릭합니다.
다시 한 번, 이 변경 사항이 현재 링크와 버퍼 모듈 뒤에 위치한 링크의 링크 속성에 직접적인 영향을 미쳤음을 확인할 수 있습니다. 또한, 버퍼 모듈이 이제 빨간색으로 표시된 것을 볼 수 있습니다. 이는 우리가 이른바 “위반 상태”를 생성했기 때문입니다. 이는 하나 이상의 링크 속성이 모듈의 매개변수 설정과 호환되지 않음을 의미합니다. 이 경우, ImageBuffer의 매개변수 설정을 해당 링크의 설정과 함께 사용할 수 없습니다. 모든 속성 창을 닫고 설계 규칙 검사를 수행하면 Ctrl+F7 다음 그림과 같이 오류 메시지가 표시됩니다.
오류 메시지 중 하나를 클릭하면 오류가 발생한 모듈이 강조 표시됩니다. 이는 여러 계층 구조로 구성된 대규모 설계에서 연산자가 어디에 있는지 한눈에 파악하기 어려울 때 매우 유용합니다. 이제 Buffer 모듈의 속성 대화 상자를 열어 보세요. 다시 한 번, 오류를 일으키는 네 가지 매개변수가 빨간색으로 표시된 것을 확인할 수 있습니다.
또한, 오류가 발생한 이유도 이제 명확해집니다. 연산자에서 지정한 관심 영역이 링크에서 허용되는 최대 이미지 크기를 초과하기 때문입니다. 이는 운영자의 매개변수 범위와 VisualApplets 설계 규칙을 위반하므로, 오류를 유발합니다. XLength 및 YLength 매개변수를 512로 변경하면 설계를 즉시 유효한 상태로 만들 수 있습니다.
설계가 거의 마무리 단계에 접어들었습니다. 이제 바로 제작을 시작하고 하드웨어에서 이 설계를 활용할 수 있습니다. 하지만 고려해야 할 단계가 하나 더 있습니다. 지금까지 우리는 12비트 픽셀 값을 DMA 모듈에 직접 연결해 왔습니다. 이렇게 하면 각 픽셀당 12비트가 PC로 전송됩니다. 픽셀이 여러 바이트에 분산되어 있기 때문에 이 형식은 소프트웨어 프로그램에서 처리하기가 매우 어렵습니다. 따라서 각 픽셀은 정확히 1바이트 이상을 차지해야 합니다. 이 예제에서는 픽셀을 16비트로 확장합니다. 이를 위해, 버퍼와 DMA 모듈 사이에 또 다른 연산자를 배치해야 합니다. 이 작업을 해결할 수 있는 연산자는 여러 가지가 있습니다. 기본 연산자 라이브러리에 포함된 ConvertPixelFormat 연산자를 사용하겠습니다. 버퍼와 DMA 모듈 사이에 이 연산자를 배치하십시오. 연산자를 링크 바로 위에 배치하면 연산자가 자동으로 삽입됩니다. 다음으로, 모듈 이름을 "To16Bit"로 변경하고 연산자 뒤의 링크 속성을 열어주세요. 보시다시피, 모듈 출력 에는 픽셀당 8비트인 기본 링크 비트 폭이 선택되어 있습니다. 따라서 모듈이 입력 링크 비트 폭을 덮어쓴 것입니다. 입력 링크 비트 폭에 대한 변경 사항은 무시됩니다. 모듈은 항상 매개변수화된 값을 출력합니다. 픽셀당 8비트라는 기본값은 비트 폭을 12에서 8로 줄이겠지만, 우리는 오히려 비트 폭을 늘리고자 합니다. 따라서 링크 속성 값을 16비트로 변경한 후 변경 사항을 확인하기만 하면 됩니다.
이제 ConvertPixelFormat 연산자는 하위 위치에 4개의 상수 0비트를 삽입하여 12비트 입력 픽셀을 16비트로 확장합니다. 즉, 4비트만큼 왼쪽으로 시프트한 것입니다. ConvertPixelFormat 연산자 대신 ShiftLeft 연산자를 사용할 수도 있습니다. 마우스로 ConvertPixelFormat 연산자를 선택한 후 팝업 메뉴나 메인 메뉴 바에서 ‘삭제’를 눌러 설계에서 해당 연산자를 삭제하거나, 단순히 Del 키를 누르십시오. 산술 연산자 라이브러리에서 ShiftLeft 연산자를 삽입하십시오. 이를 설계에 삽입한 후 링크 속성을 확인하십시오. 보시다시피, 링크 비트 폭은 여전히 12비트이며 링크 속성에서 변경할 수 없습니다. 이 연산자의 경우, 링크 비트 폭은 매개변수를 통해 변경됩니다. 즉, Shift 매개변수입니다. 매개변수 값을 4로 변경하고, 변경 사항을 적용한 후 링크 속성으로 돌아가십시오. 보시다시피, 링크 비트 폭이 이제 16비트로 변경되었습니다. 요약하자면: 일부 링크 속성은 링크에서 직접 변경할 수 있는 반면, 일부는 연산자 속성을 사용하여 변경됩니다. 해당 예제에서 이 두 가지 방법은 연산자에 모두 필요합니다. 하나는 입력 비트 폭과 무관하게 출력 비트 폭을 지정하는 데 사용되며, 즉 시프트 값이 자동으로 결정되기 때문입니다. 반면 시프트 연산자는 시프트 값을 지정하는 데 사용됩니다. 여기서는 출력 비트 폭이 매개변수 값과 입력 비트 폭에 따라 자동으로 결정됩니다.
이 예제에서는 하위 비트 위치에 4비트를 삽입했습니다. 만약 16비트를 얻기 위해 상위 비트 위치에 4비트를 추가하고 싶다면 대신 CastBitWidth 연산자를 사용할 수 있습니다.
비트 조작 연산자에 대한 설명과 예제는 연산자 참조에서 확인할 수 있습니다. 'ConvertPixelFormat', 'ShiftLeft', 'ShiftRight' 및 'CastBitWidth'를 참조하십시오 .
이제 기본 획득 설계의 확장을 마무리했습니다. 다음 단계에서는 설계를 하드웨어로 구현하여 사용할 수 있습니다. 매개변수 설정 방법과 충돌 해결 방법을 배웠습니다. 다음 섹션에서는 모든 종류의 카메라에 대한 기본 획득 애플릿 목록을 제공합니다.









이전

